<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>

  <script>

    (function () {
      var smallPlaneArr = [{}, {}, {}, {}];
      function getList() {
      }
      function addList(value) {
      }
      function removeList(i) {
      }
      // 当你要公开的属性很多时，可以把要公开的属性，放在一个对象中。最后公开对象。
      window.plane = { "getPlane": getList, "addPlane": addList, "removePlane": removeList }
    })();

    // 一个组件库封装后，只需告诉用户用什么功能，怎么用？
    // 用户不用关心这个功能怎么实现的。只需要知道怎么用就可以了。

    // 今天我们讲的这个封装的思路，其实就是一个闭包的写法？

    // 封装就是要隐藏接口内部的实现，提供一个接口给用户使用。

    // 闭包就是一种写代码的思想。利用变量的局部作用域的原理，在作用域范围内的函数，都可以操作变量。
    // 当我们把这些接口（函数、方法）公开暴露出来时，接口就会一直保留，不被销毁。并且，接口中又要使用到要保护（隐藏）的数据（局部变量），那么这个局部变量也会一直保留下来。所有的接口、局部变量都会常驻内存，不被销毁。内存销耗就增大！这样就形成了闭包。
    // 优点：避免数据被污染、隐藏了内部功能的实现
    // 缺点：耗内存，在IE里面，可能导致内存溢出的漏洞

    // 在项目中，应该减少闭包的使用，或者是使用后，手动销毁变量
    // 如：window.plane = null;
    // delete window.plane.getPlane





  </script>
</body>

</html>